package com.example.administrator.appstpremvpdemo.manager;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.support.annotation.Nullable;

import java.net.URL;

/**
 * @Author Administrator
 * @Date 2018/4/9
 * @description
 * @function
 */

public class HandlerThreadActivity extends Activity {

    //与UI线程管理的handler
    private Handler mMainHandler = new Handler();
    private myHandlerThread mHandlerthread;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mHandlerthread = new myHandlerThread("handlerthread");
        mHandlerthread.start();


        //AsyncTask的用法
        //1.
        DownloadTask downloadTask1 = new DownloadTask();
        String url="";
        downloadTask1.execute(url);//这种执行方式是单线程串行完成任务，不管你同时几个downloadTask去执行这个url任务，结果都是
        //每个任务的doInBackground方法执行完后再去执行其他任务

        //在Android 3.0开始AsyncTask增加了executeOnExecutor方法，用该方法可以让AsyncTask并行处理任务，
        DownloadTask downloadTask2 = new DownloadTask();
        //比如现在我要并行处理downloadTask1，downloadTask2这两个任务
        downloadTask1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,url);
        downloadTask2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,url);
        //AsyncTask.THREAD_POOL_EXECUTOR这是AsyncTask内部维护的一个线程池。
        //这样，这个两个任务就能够并行处理

    }

    private class myHandlerThread extends HandlerThread{
        /**
         * 子线程的handler
         */
        private Handler mHandler;

        public myHandlerThread(String name) {
            super(name);
        }

        @Override
        protected void onLooperPrepared() {
            /**
             * 由于onLooperPrepared（）方法中已经准备好了looper,所以可以直接进行
             * handler实例化
             */
            mHandler =  new Handler(getLooper()){

                @Override
                public void handleMessage(Message msg) {
                    freshUI();
                }
            };
        }

        public void post(Runnable r){
            mHandler.post(r);
        }
    }

    public void freshUI(){
        /**
         * 刷新UI，需要用UI线程专门的handler
         */
        mMainHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //刷新UI的代码
            }
        },1000);
    }


    private class DownloadTask extends AsyncTask<String, Object, Long>{

        //只有这个方法是工作线程，其他几个复写的方法都是在主线程
        @Override
        protected Long doInBackground(String... params) {
            return null;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected void onPostExecute(Long aLong) {
            super.onPostExecute(aLong);
        }

        @Override
        protected void onProgressUpdate(Object... values) {
            super.onProgressUpdate(values);
        }
    }
}
